home *** CD-ROM | disk | FTP | other *** search
/ Atari Mega Archive 1 / Atari Mega Archive - Volume 1.iso / tex / td187src.lzh / BEZIERCU.I < prev    next >
Text File  |  1991-12-14  |  2KB  |  73 lines

  1. IMPLEMENTATION MODULE BezierCurve;
  2.  
  3. IMPORT Diverses, MathLib0, MagicSys;
  4.  
  5. PROCEDURE ComputeBezier(VAR BezierArray            : ARRAY OF INTEGER;
  6.                         P, X1, Y1, X2, Y2, X3, Y3  : INTEGER;
  7.                         VAR minX, minY, maxX, maxY : INTEGER);
  8. VAR t : INTEGER;
  9.     T, sc, xa, ya, xb, yb, x1, y1 : LONGREAL;
  10. BEGIN
  11. (* Algorithmus nach dem Omicron-Basic-Prg. DRAWTEX *)
  12.  
  13.   sc := MathLib0.real(P);
  14.   x1 := MathLib0.real(X1);
  15.   y1 := MathLib0.real(Y1);
  16.  
  17.   xb := MathLib0.real((X2-X1) * 2);
  18.   xa := (MathLib0.real(X3-X1)-xb) / sc;
  19.  
  20.   yb := MathLib0.real((Y2-Y1) * 2);
  21.   ya := (MathLib0.real(Y3-Y1)-yb) / sc;
  22.  
  23.  
  24.   BezierArray[0] := X1; BezierArray[1] := Y1;
  25.   maxX       := X1; maxY       := Y1;
  26.   minX       := X1; minY       := Y1;
  27.  
  28.   t := 1;
  29.   WHILE (t<=P) DO
  30.     T := MathLib0.real(t);
  31.     BezierArray [2*t  ] := Diverses.round(x1 + ((xa*T+xb) * T / sc));
  32.     BezierArray [2*t+1] := Diverses.round(y1 + ((ya*T+yb) * T / sc));
  33.     maxX := Diverses.max(maxX, BezierArray[2*t]);
  34.     minX := Diverses.min(minX, BezierArray[2*t]);
  35.     maxY := Diverses.max(maxY, BezierArray[2*t+1]);
  36.     minY := Diverses.min(minY, BezierArray[2*t+1]);
  37.     t := t + 1;
  38.   END (* while *);
  39. END ComputeBezier;
  40.  
  41. PROCEDURE ComputeRealBezier
  42.                        (VAR BezierArray            : ARRAY OF LONGREAL;
  43.                         P, X1, Y1, X2, Y2, X3, Y3  : INTEGER);
  44. VAR t : INTEGER;
  45.     T, sc, xa, ya, xb, yb, x1, y1 : LONGREAL;
  46. BEGIN
  47. (* Algorithmus nach dem Omicron-Basic-Prg. DRAWTEX *)
  48.  
  49.   sc := MathLib0.real(P);
  50.   x1 := MathLib0.real(X1);
  51.   y1 := MathLib0.real(Y1);
  52.  
  53.   xb := MathLib0.real((X2-X1) * 2);
  54.   xa := (MathLib0.real(X3-X1)-xb) / sc;
  55.  
  56.   yb := MathLib0.real((Y2-Y1) * 2);
  57.   ya := (MathLib0.real(Y3-Y1)-yb) / sc;
  58.  
  59.  
  60.   BezierArray[0] := x1;
  61.   BezierArray[1] := y1;
  62.  
  63.   t := 1;
  64.   WHILE (t<=P) DO
  65.     T := MathLib0.real(t);
  66.     BezierArray [2*t  ] := x1 + ((xa*T+xb) * T / sc);
  67.     BezierArray [2*t+1] := y1 + ((ya*T+yb) * T / sc);
  68.     t := t + 1;
  69.   END (* while *);
  70. END ComputeRealBezier;
  71.  
  72. END BezierCurve.
  73.